package com.yanggu.spark.core.rdd.transform.value

import org.apache.spark.{SparkConf, SparkContext}

//glom算子
object RDD05_Glom {

  def main(args: Array[String]): Unit = {
    //1. 创建SparkConf
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("mapOperator")

    //2. 创建SparkContext
    val sparkContext = new SparkContext(sparkConf)

    val dataRdd = sparkContext.makeRDD(1 to 6, 2)

    //3. glom算子, 每个分区的数据放到一个数组Array[T]中
    //场景: 当需要操作一个分区内的数据时, 可以使用glom将一个分区内的数据进行收集, 然后集中操作。但是这样可能会造成OOM, 使用时需要注意
    val glomRdd = dataRdd.glom()

    //4. 获取每个分区内的最大值
    glomRdd.collect().foreach {
      array =>
        println(array.mkString(", "))
        println("分区内数据的最大值: " + array.max)
    }

    //释放资源
    sparkContext.stop()
  }

}
